#ifndef EINVALIDOPERATION_H_INCLUDED
#define EINVALIDOPERATION_H_INCLUDED

#include <Ape/Object.h>
#include <Ape/Exception.h>

#ifdef WITH_EXCEPTIONS

namespace Ape {
	/**
		This type of exception should be thrown when segfault or potential segfault (by smart pointers)
		@author Roman Gafiyatullin
	*/
	class EInvalidOperation
				: public Exception
	{
		TYPE_NAME ("Ape::EInvalidOperation")
		CLONEABLE (EInvalidOperation)
	public:
		/**
			initialize with empty message
		*/
		EInvalidOperation();
		/**
			initialize with message
			@param msg message
		*/
		EInvalidOperation(const wchar_t* msg);
		/**
			copy ctor
			@param other original object
		*/
		EInvalidOperation (const EInvalidOperation& other);
		/**
			dtor
		*/
		virtual ~EInvalidOperation();
		
		virtual void _Dump (bool verbose = false) const;
	};
}

#endif // WITH_EXCEPTIONS

#endif // EINVALIDOPERATION_H_INCLUDED
